
//438.找到字符串中所有字母异味词
class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        //使用滑动窗口，判断当前区间中的字符个数是否与目标字符串个数相同
        char tar[128]={0};  //存储p中字符的种类及个数
        int num=0;  //存储p中不同字符的个数
        for(auto e:p) 
        if(tar[e]++==0) num++;

        vector<int> ret;
        int n=s.size(),left=0,same=0;
        char ch[128]={0};   //存储区间中字符的种类及个数
        for(int right=0;right<n;right++)
        {
            if(++ch[s[right]]==tar[s[right]]) same++;
            if(right-left+1==p.size())  //当区间长度与p的长度相等时进行判断
            {
                if(same==num) ret.push_back(left);
                if(ch[s[left]]==tar[s[left]]) same--; 
                ch[s[left++]]--;
            }
        }
        return ret;
    }
};